/*
 * 功  能：
 * 文件名：SendMessage.java
 * 描  述：
 * [变更履历]
 * Version   变更日         部署              作者           变更内容
 * -----------------------------------------------------------------------------
 * V1.00     2014-7-21    dave        dave          create
 * -----------------------------------------------------------------------------
 * Copyright (c) 2014 dave  All Rights Reserved.
 */

package com.common.sendmessage;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;

/**
 * 类功能：
 * <p>
 * <a href="SendMessage.java.html"><i>View Source</i></a>
 * </p>
 * @author <a href="mailto:dave@dave.com">dave</a>
 * @version Revision: 1.0  Date: 2014-7-21 下午08:28:55
 */

public class SendMessage {

	private static String url = "http://admin.sms9.net/houtai/sms.php";
	private static String cpid = "7630"; //"jincheng"; //用户id：7630
	/**
	 * 通道id：5203 名称：行业通道(禁发广告) 价格：7.00分
     * 通道id：11319 名称：营销通道 价格：21.00分
	 */
	private static String channelid="5203";
	private String stimestamp = System.currentTimeMillis()/1000 +"";  //当前的 UNIX 时间戳
	/**
	 * Md5加密后的字符串：md5(password_timestamp_topsky)
       注： password为密码，timestamp是当前的UNIX时间戳(精确到秒)，用下划线和topsky连成一个字符串，用md5加密
       示例：假设当前时间戳为1406642263，密码为123456，则将字符串“123456_1406642263_topsky”进行md5加密得到密码3c6bcd260c3def0fcc5108ef01dc99e1
	 */
	private static String password = "18657171137"; //md5(password_timestamp_topsky) b9887c5ebb23ebb294acab183ecf0769
	private static String LJF = "&";
	private String msg=""; //信息内容(每70个字为1条短信，系统自动拆分，汉字内容请使用gbk格式的urlencode编码形式)
	private String tele="";
	private String sendtime=""; //此变量可以没有

	/**
	 *加工短信发送url字符串
	 *http://admin.sms9.net/houtai/sms.php
	 *?cpid=7630
	 *&password=b299621d1cf9119e769735a5e91f1ace
	 *          ========  3b75d0c408c0a108d655f6523e5c6d98
	 *&channelid=1
	 *&tele=13800138000,13101234567
	 *&msg=testcontent
	 *&timestamp=1406551867
	 * 返回结果：
		       如果发送成功，则返回：success:本次发送短信编号
		       如果发送失败，则返回：error:错误描述
		       错误描述:传递参数错误=-1  用户id或密码错误=-2 通道id错误=-3 手机号码错误=-4 短信内容错误=-5 余额不足错误=-6
                               绑定ip错误=-7 未带签名=-8 签名字数不对=-9 通道暂停=-10 该时间禁止发送=-11
                               时间戳错误=-12 编码异常=-13 发送被限制=-14
       	       发送短信示例： (请注意填写相应的channelid，上面红色字体已经标明可用的channelid)
	 */
	public String makeUrl(String tele, String msg){
		String surl ="";
		surl = url + "?cpid="+cpid +"&password="+ md5Password( password ) +"&channelid="+ channelid;
		surl = surl + "&tele=" + tele  + "&msg=" + encodeMsg( msg ) + "&timestamp=" + stimestamp ; //System.currentTimeMillis();
		System.out.println(surl);
		return surl;
	}

	//md5(password_timestamp_topsky)
	private String md5Password(String password){
		String ret = MD5Util.string2MD5(password+"_" + stimestamp + "_topsky"  );
		System.out.println("------加密后的pwd="+ret);
		return ret;
	}

	private String encodeMsg(String msg){
		String ret = null;
		try {
			ret = java.net.URLEncoder.encode(msg,"GBK");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return ret;
	}

	/**
	 * 输入url，调用发送
	 * @author dave
	 * @date 2014-7-21
	 * sendMessage 方法
	 * @param urladdress
	 * @return
	 */
	public String sendMessage(String urladdress) {
		StringBuffer retmess= new StringBuffer();

		try {
			// 创建一个对象
			URL url = new URL(urladdress);
			// URL对象的openStream() 方法返回的是一个InputStream输入流
			InputStream is = url.openStream();

			/*
			 * 读取输入流并且转化成为BufferedReader, 利用BufferedReader的rendLine()方法读出内容
			 */
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader bf = new BufferedReader(isr);
			String str;
			while ((str = bf.readLine()) != null) {
				retmess.append(str);
				System.out.println(str);
			}
			isr.close();


		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{

		}

		return retmess.toString();
	}

	/**
	 * @author dave
	 * @date 2014-7-21
	 * main 方法
	 * @param args
	 */

	public static void main(String[] args) {
	    //String url = "http://api.sms.cn";
		//sendMessage(url);
	    //url = "http://www.sina.com";
		//sendMessage(url);
		SendMessage sm = new SendMessage();
		sm.sendMessage( sm.makeUrl("18018695571","测试短信发送！") );
		//System.out.println("获取系统毫秒数方法1："+Long.toString(new Date().getTime()));
        //System.out.println("获取系统毫秒数方法2："+Long.toString(System.currentTimeMillis()));


	}
}
